#!/bin/bash

echo "🚀 开始并发下载 gnomAD v2.1.1 外显子位点数据 (VCF.bgz + TBI 索引文件)..."

BASE_URL="https://storage.googleapis.com/gcp-public-data--gnomad/release/2.1.1/vcf/exomes"
OUTPUT_DIR="./gnomad_exomes_v2.1.1"
mkdir -p "$OUTPUT_DIR"

MAX_CONCURRENT=6

# 下载函数
download_chromosome() {
    chrom="$1"
    vcf_filename="gnomad.exomes.r2.1.1.sites.${chrom}.vcf.bgz"
    tbi_filename="${vcf_filename}.tbi"
    vcf_url="${BASE_URL}/${vcf_filename}"
    tbi_url="${BASE_URL}/${tbi_filename}"
    vcf_output="$OUTPUT_DIR/$vcf_filename"
    tbi_output="$OUTPUT_DIR/$tbi_filename"

    echo "📥 开始下载: chr${chrom} → $vcf_filename"
    
    # 下载 VCF.bgz 文件
    wget \
        --show-progress \
        --progress=bar:force:noscroll \
        --continue \
        --timeout=30 \
        --tries=3 \
        --waitretry=5 \
        --random-wait \
        -O "$vcf_output" \
        "$vcf_url" \
        && echo "✅ VCF 完成: chr${chrom} ($vcf_filename)" \
        || echo "❌ VCF 失败: chr${chrom} ($vcf_filename)"

    # 下载对应的 TBI 索引文件
    echo "📥 开始下载索引: chr${chrom} → $tbi_filename"
    wget \
        --show-progress \
        --progress=bar:force:noscroll \
        --continue \
        --timeout=30 \
        --tries=3 \
        --waitretry=5 \
        --random-wait \
        -O "$tbi_output" \
        "$tbi_url" \
        && echo "✅ TBI 完成: chr${chrom} ($tbi_filename)" \
        || echo "❌ TBI 失败: chr${chrom} ($tbi_filename)"

    echo "✨ chr${chrom} 全部文件下载完成"
}

# 启动并发任务
echo "⏳ 启动并发下载任务（最大并发数: $MAX_CONCURRENT）..."

# 创建所有染色体列表
chromosomes=(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 X Y)

# 并发控制：使用 wait -n 或手动管理
running=0
for chrom in "${chromosomes[@]}"; do
    # 如果已达到最大并发数，等待一个任务完成
    while [ $running -ge $MAX_CONCURRENT ]; do
        if wait -n 2>/dev/null; then
            # wait -n 成功，说明有任务完成
            running=$((running - 1))
        else
            # wait -n 失败（可能是 bash 版本问题），使用备用方法
            # 检查是否有后台任务完成
            jobs_count=$(jobs -r | wc -l)
            if [ "$jobs_count" -lt "$running" ]; then
                running=$jobs_count
            else
                sleep 2
            fi
        fi
    done
    
    # 启动新任务
    download_chromosome "$chrom" &
    running=$((running + 1))
done

# 等待所有剩余任务完成
echo "🔄 正在等待所有下载完成，请勿中断..."
wait

# 最终统计
echo "🎉 所有下载任务已完成！"
echo "📌 数据保存路径: $(pwd)/$OUTPUT_DIR"

downloaded_vcf=$(find "$OUTPUT_DIR" -name "gnomad.exomes.r2.1.1.sites.*.vcf.bgz" 2>/dev/null | wc -l)
downloaded_tbi=$(find "$OUTPUT_DIR" -name "gnomad.exomes.r2.1.1.sites.*.vcf.bgz.tbi" 2>/dev/null | wc -l)

echo "📦 已成功下载 VCF 文件数: $downloaded_vcf / 24"
echo "📦 已成功下载 TBI 文件数: $downloaded_tbi / 24"
echo "📦 总计文件数: $((downloaded_vcf + downloaded_tbi)) / 48"

